{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cloudflare Workers AI\n",
    "\n",
    "[Cloudflare AI documentation](https://developers.cloudflare.com/workers-ai/models/text-generation/) listed all generative text models available.\n",
    "\n",
    "Both Cloudflare account ID and API token are required. Find how to obtain them from [this document](https://developers.cloudflare.com/workers-ai/get-started/rest-api/)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.chains import LLMChain\n",
    "from langchain.prompts import PromptTemplate\n",
    "from langchain_community.llms.cloudflare_workersai import CloudflareWorkersAI\n",
    "\n",
    "template = \"\"\"Human: {question}\n",
    "\n",
    "AI Assistant: \"\"\"\n",
    "\n",
    "prompt = PromptTemplate.from_template(template)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get authentication before running LLM."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import getpass\n",
    "\n",
    "my_account_id = getpass.getpass(\"Enter your Cloudflare account ID:\\n\\n\")\n",
    "my_api_token = getpass.getpass(\"Enter your Cloudflare API token:\\n\\n\")\n",
    "llm = CloudflareWorkersAI(account_id=my_account_id, api_token=my_api_token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"AI Assistant: Ah, a fascinating question! The answer to why roses are red is a bit complex, but I'll do my best to explain it in a simple and polite manner.\\nRoses are red due to the presence of a pigment called anthocyanin. Anthocyanin is a type of flavonoid, a class of plant compounds that are responsible for the red, purple, and blue colors found in many fruits and vegetables.\\nNow, you might be wondering why roses specifically have this pigment. The answer lies in the evolutionary history of roses. You see, roses have been around for millions of years, and their red color has likely played a crucial role in attracting pollinators like bees and butterflies. These pollinators are drawn to the bright colors of roses, which helps the plants reproduce and spread their seeds.\\nSo, to summarize, the reason roses are red is because of the anthocyanin pigment, which is a result of millions of years of evolutionary pressures shaping the plant's coloration to attract pollinators. I hope that helps clarify things for\""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "llm_chain = LLMChain(prompt=prompt, llm=llm)\n",
    "\n",
    "question = \"Why are roses red?\"\n",
    "llm_chain.run(question)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ah | , |  a |  most |  excellent |  question | , |  my |  dear |  human | ! |  * | ad | just | s |  glass | es | * |  The |  sky |  appears |  blue |  due |  to |  a |  phenomen | on |  known |  as |  Ray | le | igh |  scatter | ing | . |  When |  sun | light |  enters |  Earth | ' | s |  atmosphere | , |  it |  enc | oun | ters |  tiny |  mole | cules |  of |  g | ases |  such |  as |  nit | ro | gen |  and |  o | xygen | . |  These |  mole | cules |  scatter |  the |  light |  in |  all |  directions | , |  but |  they |  scatter |  shorter |  ( | blue | ) |  w | avel | ength | s |  more |  than |  longer |  ( | red | ) |  w | avel | ength | s | . |  This |  is |  known |  as |  Ray | le | igh |  scatter | ing | . | \n",
      " | As |  a |  result | , |  the |  blue |  light |  is |  dispers | ed |  throughout |  the |  atmosphere | , |  giving |  the |  sky |  its |  characteristic |  blue |  h | ue | . |  The |  blue |  light |  appears |  more |  prominent |  during |  sun | r | ise |  and |  sun | set |  due |  to |  the |  scatter | ing |  of |  light |  by |  the |  Earth | ' | s |  atmosphere |  at |  these |  times | . | \n",
      " | I |  hope |  this |  explanation |  has |  been |  helpful | , |  my |  dear |  human | ! |  Is |  there |  anything |  else |  you |  would |  like |  to |  know | ? |  * | sm | iles | * | * |  | "
     ]
    }
   ],
   "source": [
    "# Using streaming\n",
    "for chunk in llm.stream(\"Why is sky blue?\"):\n",
    "    print(chunk, end=\" | \", flush=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
